# resolve

模块解析：该选项用于配置 Rspack 模块解析逻辑。

- **类型：** `Object`

## resolve.alias

- **类型：** `Record<string, false | string | (string | false)[]>`
- **默认值：** `{}`

路径别名，例如：

```ts
{
  "@": path.resolve(__dirname, './src'),
  "abc$": path.resolve(__dirname, './src/abc')
}
```

此时：

- `require("@/a")` 会尝试解析 `<root>/src/a`。
- `require("abc")` 会尝试解析 `<root>/src/abc`。
- `require("abc/file.js")` 不会命中匹配规则，它会尝试去解析 `node_modules/abc/files.js`。

## resolve.aliasFields


- **Type:** `string[]`
- **Default:** `['browser']`

定义一个字段，例如 `browser`，以依照[此规范](https://github.com/defunctzombie/package-browser-field-spec)进行解析。

## resolve.browserField


- **类型：** `boolean`
- **默认值：** `true`

是否按照 [package-browser-filed-spec](https://github.com/defunctzombie/package-browser-field-spec) 规则解析。

等同于 enhanced-resolve 的 `resolve.aliasFields = ["browser"]`。

## resolve.conditionNames

- **类型：** `string[]`
- **默认值：** `[]`

与 node 的 [conditionNames](https://nodejs.org/api/packages.html#conditional-exports) 相同，用于 package.json 中的 `exports` 和 `imports` 字段。

## resolve.extensions

- **类型：** `string[]`
- **默认值：** `[".js", ".json", ".wasm"]`

按照顺序解析模块，例如 `require('./index')`，会依次尝试解析 `'./index.js'`、`'./index.json'`...

## resolve.extensionAlias

- **类型：** `Record<string, string[] | string>`
- **默认值：** `{}`

定义拓展名的别名，例如

```js
// rspack.config.js
module.exports = {
  resolve: {
    extensionAlias: {
      '.js': ['.ts', '.js'],
    },
  },
};
```

在 `require('./index.js')` 时，会依次尝试解析 `'./index.ts'`, `./index.js`。

## resolve.fallback

- **类型：** `Record<string, false | string>`
- **默认值：** `{}`

解析失败时的重定向。

## resolve.mainFields

- **类型：** `string[]`
- **默认值：**
  - `target` 为 web 时为 `["browser", "module", "main"]`
  - 其他则为 `["module", "main"]`

尝试解析 package.json 中的字段，例如：

```json
// package.json
{
  "name": "lib",
  "module": "es/index.js"
}
```

则 `import value from 'lib'` 的结果为 `lib/es/index.js`。

## resolve.mainFiles

- **类型：** `string[]`
- **默认值：** `["index"]`

解析目录时的文件名后缀，例如 `require('./dir/')` 会尝试解析 `'./dir/index'`。

## resolve.exportsFields

- **类型：** `string[]`
- **默认值：** `["exports"]`

自定义 package.json 中的 exports 字段，例如：

```json
// lib/package.json
{
  "name": "lib",
  "testExports": {
    ".": "./test.js"
  },
  "exports": {
    ".": "./index.js"
  }
}
```

则当配置为 `["testExports", "exports"]` 时, `import value from 'lib'` 的结果为 `lib/test.js`。

## resolve.modules

- **类型：** `string[]`
- **默认值：** `["node_modules"]`

解析依赖时的目录名。

## resolve.preferRelative

- **类型：** `boolean`
- **默认值：** `false`

当开启时，`require('file')` 会首先寻找当前目录下的 `./file` 文件，而不是 `<modules>/file`。

## resolve.preferAbsolute


- **Type:** `boolean`
- **Default:** `false`

在解析时，倾向使用与 `resolve.roots` 相关的绝对路径。

## resolve.tsConfigPath

- **类型：** `string | undefined`
- **默认值：** `undefined`

这个选项接受的是 `tsconfig.json` 的文件路径。在开启这个选项后， Rspack 会基于 `tsconfig.json` 中 的 `paths` 和 `baseUrl` 来寻找模块，其功能等同于 [tsconfig-paths-webpack-plugin](https://www.npmjs.com/package/tsconfig-paths-webpack-plugin)。

```js rspack.config.js
const path = require('path');

/** @type {import('@rspack/cli').Configuration} */
const config = {
  // ...
  resolve: {
    tsConfigPath: path.resolve(__dirname, 'tsconfig.json'),
  },
  // ...
};
module.exports = config;
```

[点击查看例子](https://github.com/rspack-contrib/rspack-examples/tree/main/rspack/basic-ts)。

:::warning

不支持 `tsconfig.json#extends` 字段。

:::

## resolve.tsConfig


- **类型:** `object`
- **默认值:** `undefined`

```js title="rspack.config.js"
module.exports = {
  resolve: {
    tsconfig: {
      configFile: path.resolve(__dirname, './tsconfig.json'),
      references: 'auto',
    },
  },
};
```

### resolve.tsConfig.configFile

- **类型:** `string`

同 [resolve.tsConfigPath](#resolvetsconfigpath).

这个选项接受的是 `tsconfig.json` 的文件路径。在开启这个选项后， Rspack 会基于 `tsconfig.json` 中 的 `paths` 和 `baseUrl` 来寻找模块，其功能等同于 [tsconfig-paths-webpack-plugin](https://www.npmjs.com/package/tsconfig-paths-webpack-plugin)。

### resolve.tsConfig.references

- **类型:** `string[] | "auto" | undefined`
- **默认值:** `undefined`

支持 [tsconfig-paths-webpack-plugin](https://github.com/dividab/tsconfig-paths-webpack-plugin#references-_string-defaultundefined) 中定义的 [tsconfig project references](https://www.typescriptlang.org/docs/handbook/project-references.html).

可以通过文件路径用于手动配置，或者使用 `auto` 用于自动读取 `tsconfig.references` 中的文件路径。

使用 `undefined` 将会关闭该功能。

## resolve.fullySpecified

- **类型：** `boolean`
- **默认值：** `false`

不再解析扩展名，不再解析 package.json 中的 mainFiles（但不会影响来自 mainFiles, browser, alias 的请求）。

## resolve.restrictions


- **Type:** `string[]`
- **Default:** `[]`

限制请求解析路径的解析限制列表。

## resolve.roots


- **Type:** `string[]`
- **Default:** `[]`

一个目录列表，用于解析服务器相对 URL（以'/'开头的 URL）。默认使用 context 配置选项。在非 Windows 系统上，这些请求首先作为绝对路径进行解析。

## resolve.byDependency

- **类型：** `Record<string, Resolve>`.

依据模块类型自定义 Resolve 配置。
